UML 14 种图详解
UML 2.5.1 的 14 种图分为结构图(描述系统静态结构)和行为图(描述系统动态行为)两大类。以下逐一详解每类图的概念、用途及 PlantUML 示例。
1. 14 种图分类
UML 2.5.1 的 14 种图分为结构图(描述系统静态结构)和行为图(描述系统动态行为)两大类:
2. 结构图(Structure Diagrams)
结构图不考虑时间维度,描述系统在某一时刻的静态构成。
2.1 类图(Class Diagram)— 最核心的结构图
描述系统中的类、接口、协作及其关系(继承、关联、聚合、组合、依赖)。是面向对象建模的基石。
2.2 对象图(Object Diagram)
类图的实例化快照——展示某一时刻对象间的连接关系。用于举例说明类图。
2.3 包图(Package Diagram)
将模型元素按包组织,展示包之间的依赖和包含关系。用于宏观架构分层。
2.4 组件图(Component Diagram)
展示软件组件之间的组织和依赖,强调接口的提供与消费。适合描述微服务拓扑。
2.5 复合结构图(Composite Structure Diagram)
描述类或组件的内部结构(Parts),以及各部件之间的协作连接。侧重内部协作关系。
2.6 部署图(Deployment Diagram)
展示软件制品(artifact)部署到硬件节点(node)上的物理拓扑。运维和架构师常用。
2.7 剖面图(Profile Diagram)
UML 的扩展机制——通过 stereotype、tagged value、constraint 定义领域特定建模扩展。
3. 行为图(Behavior Diagrams)
行为图描述系统随时间变化的动态行为。
3.1 用例图(Use Case Diagram)
从用户视角描述系统提供的功能(用例)及参与者与系统之间的交互。需求阶段首选工具。
3.2 活动图(Activity Diagram)
流程图的高级形式,支持分支、并发、泳道。适合描述业务流程和算法步骤。
3.3 状态机图(State Machine Diagram)
描述对象在其生命周期中经历的状态序列及触发状态转移的事件。适合订单、工单等有明确状态的对象。
3.4 序列图(Sequence Diagram)
按时间顺序展示对象间的消息交互。UML 中最常用的行为图,适合描述 API 调用链、微服务交互。
3.5 通信图(Communication Diagram)
与序列图语义等价,但强调对象间的拓扑连接关系而非时间顺序。是序列图的"空间视图"。
3.6 交互概览图(Interaction Overview Diagram)
活动图与序列图的混合体——用活动图节点嵌入子序列图。适合宏观业务流程串联。
3.7 时间图(Timing Diagram)
展示对象状态随时间的变化曲线,带有精确的时间刻度。适合实时系统、协议时序分析。
3.8 序列图 vs 活动图:不可替代性说明
核心区别:时序图侧重"谁和谁在什么时候说了什么"(消息交互),活动图侧重"事情怎么流转、谁做什么"(业务流程)。两者视角不同,场景互补,无法完全互相替代。
3.8.1 并行/并发流 — fork/join 是活动图的独有优势
活动图通过 fork/join 节点直观展示多个活动同时进行。时序图虽然有 par 交互片段,但表达的是"多条消息平行发送"而非"多个业务流程分支同时执行"——语义和可视化效果差异明显。例如订单确认后需要同时执行库存校验、风控检查、价格计算,活动图一个 fork 就清楚了。
3.8.2 对象流 / 数据流 — 活动图的专有概念
活动图可以用 对象节点(Object Node) 和 数据引脚(Pin) 显式建模数据在各节点间如何流动、变换形态。例如"表单数据 → 校验 → 有效订单对象 → 计算运费 → 含运费订单 → 入库"——数据在各步骤间的形态变化清晰可追踪。而时序图只关心消息本身,完全不关心数据在流程中如何变换。
3.8.3 泳道(Partitions)— 按职责边界组织流程
活动图的泳道按组织/角色/部门划分,一眼看出"谁负责哪一段",适用于跨部门业务流程。时序图的参与者(Participant)侧重消息收发,而泳道更侧重组织级别的运营视图——两者表达的维度不同。
3.8.4 场景适用性总结
| 场景 | 活动图 | 时序图 | 推荐 |
|---|---|---|---|
| 并行/并发任务 | fork/join 直观 | par 片段勉强可用 | 活动图 |
| 对象/数据流转 | 原生支持对象流 | 无此概念 | 活动图独有 |
| 泳道/部门职责划分 | 天然适合业务流程建模 | 参与者侧重消息交互 | 活动图 |
| 复杂决策分支网络 | 决策/合并节点清晰 | 嵌套 alt/opt 易混乱 | 活动图 |
| API 调用链/协议交互 | 不适合 | 天然适合 | 时序图独有 |
| 对象生命周期时序 | 不适合 | 时间线按序展示 | 时序图独有 |
3.8.5 活动图关键术语解释
活动图中每个节点和连接线都有明确的名字。理解这些术语是读懂活动图的前提:
| 术语 | 中文/别名 | 说明 | 图示 |
|---|---|---|---|
| Fork / Join | 分叉 / 汇合 | Fork 将一条控制流拆成多条并行分支同步执行;Join 等待所有分支都完成后才汇合成一条继续。类比:厨房同时备菜、炒菜、做饮品(fork),三道都齐才上桌(join)。与 Decision 的关键区别:Fork 是同时走多条,Decision 是选一条走。 | 粗横线 |
| Decision / Merge | 决策 / 合并 | Decision 根据条件只选一条分支执行;Merge 将多条分支汇总,任意一条到达即继续(不等全部,区别于 Join)。 | 菱形 ◇ |
| Swimlane / Partition | 泳道 / 分区 | 按角色、部门、系统划分职责区域,每个泳道内的 Action 由该角色负责。纵向或横向的矩形条。 | 纵向/横向长条 |
| Action Node | 动作节点 | 不可再分的原子操作,如"校验库存""发送邮件"。活动图的基本单元。 | 圆角矩形 |
| Object Node | 对象节点 | 表示数据在某时刻的形态快照——Action 产生的输出或需要的输入。 | 矩形 |
| Pin | 引脚 | 附着在 Action 边上的小矩形,表示该 Action 的输入参数或输出结果端口。 | Action 边上的小矩形 |
| Initial / Final Node | 起始 / 终止 | 流程入口(实心圆 ●)和出口(实心圆加外圈 ◉ / 叉号 ⊗)。Flow Final 表示该支流结束但不终止整个活动。 | 实心圆 / 牛眼圈 |
| Control Flow | 控制流 | 表示执行顺序的有向箭头,不携带数据,只传递控制权。 | 实线箭头 → |
| Object Flow | 对象流 | 表示数据对象在节点间传递的有向箭头,数据随箭头流动。 | 实线箭头 → |
| Guard Condition | 守卫条件 | 写在决策分支出口上的条件表达式 [condition],决定激活哪条分支。如 [库存 > 0]。 |
方括号标注 |
| Activity Edge | 活动边 | 所有连接两个节点的有向线段统称,包含 Control Flow 和 Object Flow。 | 箭头线 |